/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.database.dao.impl;

import com.database.dao.AsignacionesDao;
import com.database.model.Asignaciones;
import com.database.model.Usuario;
import com.database.util.HibernateUtil;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author diego and Yinna
 */
public class AsignacionesDaoImplement implements AsignacionesDao{

    @Override
    public List<Asignaciones> buscarTodos() {
        Session session= HibernateUtil.getSessionFactory().openSession();
        return session.createQuery("from Asignaciones").list();
    }

    @Override
    public void insertar(Asignaciones asignaciones) {
         Session session= HibernateUtil.getSessionFactory().openSession();
         FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.save(asignaciones);
             session.beginTransaction().commit();
             context.addMessage(null, new FacesMessage("Se ha guardado la nueva Asignacion con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al guardar La asignación"+e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }

    @Override
    public void actualizar(Asignaciones asignaciones) {
         Session session= HibernateUtil.getSessionFactory().openSession();
        FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.merge(asignaciones);
             session.beginTransaction().commit(); 
             context.addMessage(null, new FacesMessage("Se ha actualizado la Asignacion con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al actualizar la Asignación: "+e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }

    @Override
    public void eliminar(Asignaciones asignaciones) {
         Session session= HibernateUtil.getSessionFactory().openSession();
        FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.delete(asignaciones);
             session.beginTransaction().commit();
             context.addMessage(null, new FacesMessage("Se ha eliminado La Asignación con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al eliminar: " +e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }

    @Override
    public Asignaciones buscarPorId(Integer id) {
        Session session= HibernateUtil.getSessionFactory().openSession();
         return (Asignaciones) session.load(Asignaciones.class, id);
    }
    
    @Override
      public List<Usuario> usuariosDisponiblesxCategoria(int codCategoria){
        Session session= HibernateUtil.getSessionFactory().openSession();
        String sql="From Asignaciones where categoria.codCategoria=:categoriaBuscada";
        Query query= session.createQuery(sql);
        query.setParameter("categoriaBuscada", codCategoria);
        List<Asignaciones> miList= query.list();
        List<Usuario> listUsuario=new ArrayList<Usuario>();
        for(Asignaciones a :miList){
            listUsuario.add(a.getUsuario());
        }
        return listUsuario;
      }

}
